/**
 * @author W
 * @date 2020/4/23 21:23
 */

class Animal {
    public name: string;
    public age: number;
}

// @ts-ignore
class Cat extends Animal {
    public weight: number
}

{
    let a = [1, 2, 3]
    let b = [4, ...a]

}


interface Peolpe<T> {
    [key: string]: T
}

function fn(name: string, age: number): Peolpe<string> {
    return {
        name
    }
}

fn.call(null, "wm", 100) // 开启了严格的call检查，传入的参数类型必须符合


{
    class A {
        weight:number = 10; // 初始化后，可以不用在constructor里再次初始化
        constructor() {}
        /*getWeight(){
            return function () { // 这里返回了新的函数执行，调用这个函数的this指向就不明确了  开启noImplicitThis 就要求this有明确的指向
                return this.weight
            }
        }*/
        getWeight(){
            return () =>  { // 使用箭头函数代替后，可以在定义时就绑定了this为A
                return this.weight
            }
        }
    }

    let a = new A()
    console.log(a);
    console.log(a.getWeight()())
}


    function say(a:number) {
        if (a==1){
            return 1
        }
        if (a==2){
            return 2
        }
        return 3  // noImplicitReturns 开启后，要求函数的每个分支都要有返回值，否则报错
    }

export = new Cat()